#include <stdio.h>
#include <stdlib.h>

// 小A参加了一个n人的活动，每个人都有一个唯一编号i(i>=0 & i<n)，其中m对相互认识，在活动中两个人可以通过互相都认识的一个人介绍认识。现在问活动结束后，小A最多会认识多少人？

// 输入描述：
    // 第一行聚会的人数：n（n>=3 & n<10000）；
    // 第二行小A的编号: ai（ai >= 0 & ai < n)；
    // 第三互相认识的数目: m（m>=1 & m < n(n-1)/2）；
    // 第4到m+3行,为互相认识的对，以','分割的编号。
// 输出描述：
    // 输出小A最多会新认识的多少人？

// 示例1
// 输入：
    // 7
    // 5
    // 6
    // 1,0
    // 3,1
    // 4,1
    // 5,3
    // 6,1
    // 6,5
// 输出：
    // 3

int compare(const void* a, const void* b) {
    const int* edge1 = (const int*)a;
    const int* edge2 = (const int*)b;
    if (edge1[0] != edge2[0]) {
        return edge1[0] - edge2[0];
    }
    return edge1[1] - edge2[1];
}

int main() {
    int n, ai, m;
    scanf("%d", &n);
    scanf("%d", &ai);
    scanf("%d", &m);

    int (*edges)[2] = malloc(m * sizeof(int[2]));
    for (int i = 0; i < m; i++) {
        int u, v;
        scanf("%d,%d", &u, &v);
        if (u > v) {
            int temp = u;
            u = v;
            v = temp;
        }
        edges[i][0] = u;
        edges[i][1] = v;
    }

    qsort(edges, m, sizeof(int[2]), compare);

    int unique_edges = 0;
    for (int i = 0; i < m; i++) {
        if (i == 0 || edges[i][0] != edges[i - 1][0] ||
                edges[i][1] != edges[i - 1][1]) {
            edges[unique_edges][0] = edges[i][0];
            edges[unique_edges][1] = edges[i][1];
            unique_edges++;
        }
    }

    int* deg = (int*)calloc(n, sizeof(int));
    for (int i = 0; i < unique_edges; i++) {
        int u = edges[i][0];
        int v = edges[i][1];
        deg[u]++;
        deg[v]++;
    }

    int** graph = (int**)malloc(n * sizeof(int*));
    for (int i = 0; i < n; i++) {
        graph[i] = (int*)malloc(deg[i] * sizeof(int));
    }

    int* index = (int*)calloc(n, sizeof(int));
    for (int i = 0; i < unique_edges; i++) {
        int u = edges[i][0];
        int v = edges[i][1];
        graph[u][index[u]++] = v;
        graph[v][index[v]++] = u;
    }

    int* visited = (int*)calloc(n, sizeof(int));
    int* queue = (int*)malloc(n * sizeof(int));
    int front = 0, rear = 0;
    int count = 0;

    visited[ai] = 1;
    queue[rear++] = ai;
    count = 1;

    while (front < rear) {
        int cur = queue[front++];
        for (int i = 0; i < deg[cur]; i++) {
            int neighbor = graph[cur][i];
            if (!visited[neighbor]) {
                visited[neighbor] = 1;
                queue[rear++] = neighbor;
                count++;
            }
        }
    }

    int new_friends = (count - 1) - deg[ai];
    printf("%d\n", new_friends);

    for (int i = 0; i < n; i++) {
        free(graph[i]);
    }
    free(graph);
    free(deg);
    free(index);
    free(visited);
    free(queue);
    free(edges);

    return 0;
}